package com.changgou.file.controller;

import com.changgou.entity.Result;
import com.changgou.entity.StatusCode;
import com.changgou.file.util.FastDFSClient;
import com.changgou.file.util.FastDFSFile;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;

@RestController
@RequestMapping("/file")
public class FileController {


    /**
     * 文件上传
     * @param file  上传的文件
     * @return  返回 访问该文件的 路径 url
     */

    @PostMapping("/upload")
    public Result uploadfile(MultipartFile file){

        try {
            //判断 文件 内容是否为空
            if(file==null){
                return new Result(true, StatusCode.ERROR,"文件为空");
            }

            String originalFilename = file.getOriginalFilename(); //获取传过来文件的 完整文件名

            //判断文件名是否为空
            if(originalFilename==null){
                return new Result(true, StatusCode.ERROR,"文件名为空");
            }
            byte[] bytes = file.getBytes(); //获取 文件内容

/*     截取文件拓展名 : 获取完整文件名中 最后一个 "." (点)的位置 , 因为获取到的位置在点之前,截取的话会把点也截上,
        所以需要+1 把 位置放到点之后,就可以完整攫取该文件的拓展名*/
            int etx = originalFilename.lastIndexOf(".") + 1;
            String substring = originalFilename.substring(etx);

            /**
             * originalFilename: 文件名
             * bytes : 文件内容
             * substring : 拓展名
             */
            FastDFSFile fastDFSFile = new FastDFSFile(originalFilename,bytes,substring); //创建 fastDFSFile 封装文件信息(文件名,文件内容,拓展名)

            /**
             * upload 字符串 数组 :  索引0  为 ,文件存储所在的 组名 (文件夹名)
             *                       索引1  为, 文件名
             */
            String[] upload = FastDFSClient.upload(fastDFSFile);//上传 文件 ,返回 上传到服务器文件所在位置的 url 需要拼接

            String trackerUrl = FastDFSClient.getTrackerUrl();//获取 服务器 地址

            /**
             * trackerUrl :  服务器 地址
             * upload[0]  : 刚刚上传的文件所在的 组名(文件夹名)
             * upload[1]  : 文件名
             */
            String path= trackerUrl+upload[0]+"/"+upload[1];  //拼接成 文件的 完整 访问路径
            //String path=FastDFSClient.getTrackerUrl()+group+"/"+strorePath;
            return new Result(true, StatusCode.OK,"上传文件成功",path);


        }catch (Exception e){
            e.printStackTrace();
            return new Result(true, StatusCode.ERROR,"上传文件失败");
        }

    }




}
